home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sparc / include / asm / iommu_64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.8 KB  |  66 lines

  1. /* iommu.h: Definitions for the sun5 IOMMU.
  2.  *
  3.  * Copyright (C) 1996, 1999, 2007 David S. Miller (davem@davemloft.net)
  4.  */
  5. #ifndef _SPARC64_IOMMU_H
  6. #define _SPARC64_IOMMU_H
  7.  
  8. /* The format of an iopte in the page tables. */
  9. #define IOPTE_VALID   0x8000000000000000UL
  10. #define IOPTE_64K     0x2000000000000000UL
  11. #define IOPTE_STBUF   0x1000000000000000UL
  12. #define IOPTE_INTRA   0x0800000000000000UL
  13. #define IOPTE_CONTEXT 0x07ff800000000000UL
  14. #define IOPTE_PAGE    0x00007fffffffe000UL
  15. #define IOPTE_CACHE   0x0000000000000010UL
  16. #define IOPTE_WRITE   0x0000000000000002UL
  17.  
  18. #define IOMMU_NUM_CTXS    4096
  19.  
  20. struct iommu_arena {
  21.     unsigned long    *map;
  22.     unsigned int    hint;
  23.     unsigned int    limit;
  24. };
  25.  
  26. struct iommu {
  27.     spinlock_t        lock;
  28.     struct iommu_arena    arena;
  29.     void            (*flush_all)(struct iommu *);
  30.     iopte_t            *page_table;
  31.     u32            page_table_map_base;
  32.     unsigned long        iommu_control;
  33.     unsigned long        iommu_tsbbase;
  34.     unsigned long        iommu_flush;
  35.     unsigned long        iommu_flushinv;
  36.     unsigned long        iommu_tags;
  37.     unsigned long        iommu_ctxflush;
  38.     unsigned long        write_complete_reg;
  39.     unsigned long        dummy_page;
  40.     unsigned long        dummy_page_pa;
  41.     unsigned long        ctx_lowest_free;
  42.     DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
  43.     u32            dma_addr_mask;
  44. };
  45.  
  46. struct strbuf {
  47.     int            strbuf_enabled;
  48.     unsigned long        strbuf_control;
  49.     unsigned long        strbuf_pflush;
  50.     unsigned long        strbuf_fsync;
  51.     unsigned long        strbuf_err_stat;
  52.     unsigned long        strbuf_tag_diag;
  53.     unsigned long        strbuf_line_diag;
  54.     unsigned long        strbuf_ctxflush;
  55.     unsigned long        strbuf_ctxmatch_base;
  56.     unsigned long        strbuf_flushflag_pa;
  57.     volatile unsigned long *strbuf_flushflag;
  58.     volatile unsigned long    __flushflag_buf[(64+(64-1)) / sizeof(long)];
  59. };
  60.  
  61. extern int iommu_table_init(struct iommu *iommu, int tsbsize,
  62.                 u32 dma_offset, u32 dma_addr_mask,
  63.                 int numa_node);
  64.  
  65. #endif /* !(_SPARC64_IOMMU_H) */
  66.